#ifndef __APP_FLANK_H__
#define __APP_FLANK_H__

#include "Common_Config.h"
#include "Inf_CPS121.h"
#include "Inf_FourwayKey.h"
#include "Inf_SolenoidValve.h"

#include <stdbool.h>

#define FLANK_MAXSIZE       4  /* 侧翼数量 */
#define FLANK_FULL_PRESSURE 35 /* 侧翼气袋满气压值 35Kpa */

/* 侧翼阀门数组索引 */
typedef enum
{
    FLANK_INDEX_ACTIVE_LEFT,
    FLANK_INDEX_ACTIVE_RIGHT,
    FLANK_INDEX_PASSIVE_LEFT,  /* 靠背侧翼 */
    FLANK_INDEX_PASSIVE_RIGHT, /* 坐垫侧翼 */
    FLANK_INDEX_MAX
} FlankIndex_e;

/* 侧翼类型 */
typedef enum
{
    FLANK_TYPE_ACTIVE,
    FLANK_TYPE_PASSIVE
} FlankType_e;

typedef struct
{
    /* 充气气阀 */
    SolenoidValve *airInflationValve;

    /* 充气使能 */
    bool inflationEnable;

    /* 放气气阀 */
    SolenoidValve *airDeflateValve;

    /* 放气使能 */
    bool deflateEnable;

    /* 满气压值 */
    const uint8_t fullPressureValue;

    /* 当前气压值(相对气压, 单位KPa) */
    int16_t currentPressure;

    /* 编号 */
    FlankIndex_e flankIndex;

    /* 侧翼类型 */
    FlankType_e flankType;

} Flank;

extern Flank flanksConfig[FLANK_MAXSIZE]; /* 侧翼配置数组 */

/**
 * @brief 初始化侧翼
 *
 */
void App_Flank_Init(void);

/**
 * @brief 启动侧翼, 开始充气
 *
 */
void App_Flank_Inflation(void);

/**
 * @brief 关闭侧翼, 开始泄气
 *
 * @param flank 侧翼结构体指针
 */
void App_Flank_Deflate(void);

/**
 * @brief 关闭所有侧翼阀门
 *
 */
void App_Flank_Stop(void);

#endif
